/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.dao;

import beans.DiscapacidadTratamiento;
import beans.MedicamentoDiscapacidad;
import beans.TerapiaDiscapacidad;
import core.bd;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Usuario
 */
public class TerapiaDiscapacidadDAO {
    
    public static void guardarItem(TerapiaDiscapacidad terapia) throws Exception{
        Connection conexion = null;
        PreparedStatement statement = null;
        
        try{
            conexion = bd.getConexion();
            
            statement = conexion.prepareStatement("INSERT INTO terapia_discapacidad("
                    + "id_terapia, id_discapacidad_tratamiento, intensidad, "
                    + "intensidad_medida_tiempo, cantidad, observacion, "
                    + "fecha_inicio, estado) "
                    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

            
            statement.setInt(1, terapia.getIdTerapia());
            statement.setInt(2, terapia.getDiscapacidadTratamiento().getId());
            statement.setInt(3, terapia.getIntensidad());
            statement.setInt(4, terapia.getIntensidadMedidaTiempo());
            statement.setInt(5, terapia.getCantidad());
            statement.setString(6, terapia.getObservacion());
            statement.setDate(7, new java.sql.Date(
                    terapia.getFechaInicio().getTime()));
//            statement.setDate(8, new java.sql.Date(
//                    terapia.getFechaFin().getTime()));
            statement.setString(8, terapia.getEstado().getDesc());
            
            statement.executeUpdate();
            
        }catch(SQLException e){
            e.printStackTrace();
            throw new Exception(String.format(
                    "No se pudo guardar Terapia %s", terapia.getTerapia()));
        }finally{
            //No hay pool de conexiones?
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    //Actualizacion
    public static void actualizarItem(TerapiaDiscapacidad terapia) {
        Connection conexion = null;
        PreparedStatement statement = null;

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement("UPDATE terapia_discapacidad "
                    + "SET id_terapia=?, id_discapacidad_tratamiento=?, "
                    + "intensidad=?, intensidad_medida_tiempo=?, cantidad=?, "
                    + "observacion=?, fecha_fin=?, "
                    + "estado=? WHERE id_terapia_discapacidad = ?;");
            statement.setInt(1, terapia.getIdTerapia());
            statement.setInt(2, terapia.getDiscapacidadTratamiento().getId());
            statement.setInt(3, terapia.getIntensidad());
            statement.setInt(4, terapia.getIntensidadMedidaTiempo());
            statement.setInt(5, terapia.getCantidad());
            statement.setString(6, terapia.getObservacion());
//            statement.setDate(7, new java.sql.Date(
//                    med.getFechaInicio().getTime()));
            if (null != terapia.getFechaFin()) {
                statement.setDate(7, new java.sql.Date(
                        terapia.getFechaFin().getTime()));
            }
            statement.setString(8, terapia.getEstado().getDesc());
            statement.setInt(9, terapia.getId());

            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }

    public static void actualizarEstadoItem(TerapiaDiscapacidad terapia) throws Exception {
        Connection conexion = null;
        PreparedStatement statement = null;

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement("UPDATE terapia_discapacidad "
                    + "SET estado=? WHERE id_terapia_discapacidad = ?;");
            statement.setString(1, terapia.getEstado().getDesc());
            statement.setInt(2, terapia.getId());

            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new Exception("No su pudo actualizar el estado");
        } finally {
//            bd.liberaConexion(conexion);
//            bd.liberarStatement(statement);
        }
    }
    
    
    
    
    
    public static Set<TerapiaDiscapacidad> getTerapias() {

        return null;
    }

    public static Set<TerapiaDiscapacidad> getTerapias(
            DiscapacidadTratamiento discapacidadTratamiento) {

        Set<TerapiaDiscapacidad> terapias =
                new HashSet<TerapiaDiscapacidad>();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        TerapiaDiscapacidad terapia = new TerapiaDiscapacidad();

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select terapia_discapacidad.*, terapia.nombre from terapia_discapacidad natural join terapia "
                    + "where id_discapacidad_tratamiento = ?");
            statement.setInt(1, discapacidadTratamiento.getId());
            rs = statement.executeQuery();
            while (rs.next()) {
                terapia.setId(rs.getInt("id_terapia_discapacidad"));
                terapia.setIdTerapia(rs.getInt("id_terapia"));
                terapia.setDiscapacidadTratamiento(discapacidadTratamiento);
                terapia.setIntensidad(rs.getInt("intensidad"));
                terapia.setIntensidadMedidaTiempo(rs.getInt("intensidad_medida_tiempo"));
                terapia.setCantidad(rs.getInt("cantidad"));
                terapia.setObservacion(rs.getString("observacion"));
                terapia.setFechaInicio(rs.getDate("fecha_inicio"));
                terapia.setFechaFin(rs.getDate("fecha_inicio"));
                terapia.setTerapia(rs.getString("nombre"));

//                String string = rs.getString("estado");
//                TerapiaDiscapacidad.Estado estado = null;
//                if (string.equals(TerapiaDiscapacidad.Estado.ACTIVO.getDesc())) {
//                    estado = TerapiaDiscapacidad.Estado.ACTIVO;
//                } else {
//                    estado = TerapiaDiscapacidad.Estado.INACTIVO;
//                }
                terapia.setEstado(TerapiaDiscapacidad.getEstado(rs.getString("estado")));

                terapias.add(terapia);
                terapia = new TerapiaDiscapacidad();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return terapias;
    }
    
    public static Set<TerapiaDiscapacidad> getTerapiasActivas(
            DiscapacidadTratamiento discapacidadTratamiento) {

        Set<TerapiaDiscapacidad> terapias =
                new HashSet<TerapiaDiscapacidad>();
        Connection conexion = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        TerapiaDiscapacidad terapia = new TerapiaDiscapacidad();

        try {
            conexion = bd.getConexion();
            statement = conexion.prepareStatement(""
                    + "select terapia_discapacidad.*, terapia.nombre from terapia_discapacidad natural join terapia "
                    + "where id_discapacidad_tratamiento = ? "
                    + "and estado ilike 'act'");
            statement.setInt(1, discapacidadTratamiento.getId());
            rs = statement.executeQuery();
            while (rs.next()) {
                terapia.setId(rs.getInt("id_terapia_discapacidad"));
                terapia.setIdTerapia(rs.getInt("id_terapia"));
                terapia.setDiscapacidadTratamiento(discapacidadTratamiento);
                terapia.setIntensidad(rs.getInt("intensidad"));
                terapia.setIntensidadMedidaTiempo(rs.getInt("intensidad_medida_tiempo"));
                terapia.setCantidad(rs.getInt("cantidad"));
                terapia.setObservacion(rs.getString("observacion"));
                terapia.setFechaInicio(rs.getDate("fecha_inicio"));
                terapia.setFechaFin(rs.getDate("fecha_inicio"));
                terapia.setTerapia(rs.getString("nombre"));

//                String string = rs.getString("estado");
//                TerapiaDiscapacidad.Estado estado = null;
//                if (string.equals(TerapiaDiscapacidad.Estado.ACTIVO.getDesc())) {
//                    estado = TerapiaDiscapacidad.Estado.ACTIVO;
//                } else {
//                    estado = TerapiaDiscapacidad.Estado.INACTIVO;
//                }
                terapia.setEstado(TerapiaDiscapacidad.getEstado(rs.getString("estado")));

                terapias.add(terapia);
                terapia = new TerapiaDiscapacidad();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return terapias;
    }
}
